OPTION (BUILD_DOCUMENTATION "Build the doxygen-based documentation" OFF)
IF (BUILD_DOCUMENTATION)
    MESSAGE (STATUS)
    MESSAGE (STATUS "===== Documentation =====")
    FIND_PACKAGE (Doxygen)
    IF (DOXYGEN_FOUND)
        SET (doxygenConfigFileIn "${CMAKE_CURRENT_SOURCE_DIR}/player.dox.in")
        SET (doxygenConfigFile "${CMAKE_CURRENT_BINARY_DIR}/player.dox")

        SET (DOXYGEN_LANGUAGE "English" CACHE STRING "Documentation language")
        MARK_AS_ADVANCED (DOXYGEN_LANGUAGE)

        IF (PLAYER_OS_WIN)
            FIND_PACKAGE (HTMLHelp)
            IF (HTML_HELP_COMPILER)
                SET (DOXYGEN_HTMLHELP YES)
            ELSE (HTML_HELP_COMPILER)
                SET (DOXYGEN_HTMLHELP NO)
            ENDIF (HTML_HELP_COMPILER)
        ELSE (PLAYER_OS_WIN)
            SET (DOXYGEN_HTMLHELP NO)
        ENDIF (PLAYER_OS_WIN)

        FIND_PACKAGE (LATEX)
        IF (LATEX_COMPILER OR PDFLATEX_COMPILER)
            SET (DOXYGEN_LATEX YES)
            IF (PDFLATEX_COMPILER)
                SET (DOXYGEN_PDFLATEX YES)
            ELSE (PDFLATEX_COMPILER)
                SET (DOXYGEN_PDFLATEX NO)
            ENDIF (PDFLATEX_COMPILER)
        ELSE (LATEX_COMPILER OR PDFLATEX_COMPILER)
            SET (DOXYGEN_LATEX NO)
            SET (DOXYGEN_PDFLATEX NO)
        ENDIF (LATEX_COMPILER OR PDFLATEX_COMPILER)

        FIND_PROGRAM (HAVE_DOT dot)
        IF (HAVE_DOT)
            SET (HAVE_DOT_PROGRAM YES)
        ENDIF (HAVE_DOT)
        FIND_PACKAGE (Perl)

        # Generate the doxygen configure file based on various configuration parameters
        CONFIGURE_FILE (${doxygenConfigFileIn} ${doxygenConfigFile} @ONLY)

        # Build documentation target
        ADD_CUSTOM_TARGET (doc
            ${DOXYGEN_EXECUTABLE} ${doxygenConfigFile}
            DEPENDS ${doxygenConfigFile}
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
            VERBATIM)
        ADD_DEPENDENCIES (doc playercore playerinterface)

        # Install documentation
        SET (docInstallDir "share/doc/player-${PLAYER_VERSION}")
        SET (docSourceDir "${CMAKE_CURRENT_BINARY_DIR}/player-docs/")
        # Make the output directory now so install doesn't complain that it doesn't exist
        FILE (MAKE_DIRECTORY ${docSourceDir})
        INSTALL (DIRECTORY ${docSourceDir}
            DESTINATION ${docInstallDir})

        # Compile the LaTeX documentation
        IF (DOXYGEN_LATEX)
            INCLUDE (${PLAYER_CMAKE_DIR}/internal/CompileLatex.cmake)
            COMPILE_LATEX (${CMAKE_CURRENT_BINARY_DIR}/latex refman)
            ADD_DEPENDENCIES (doc_latex doc)
        ENDIF (DOXYGEN_LATEX)

        # Upload documentation target (not supported on Windows)
        SET (docWebDestination "Player-svn")
        SET (docName "player")
        IF (NOT PLAYER_OS_WIN)
            ADD_CUSTOM_TARGET (upload_doc
                ${CMAKE_CURRENT_SOURCE_DIR}/upload_www.sh ${docWebDestination} ${docName}
                WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
                VERBATIM)
            ADD_DEPENDENCIES (upload_doc doc)
        ENDIF (NOT PLAYER_OS_WIN)
    ELSE (DOXYGEN_FOUND)
        MESSAGE (STATUS "Documentation will not be built - Doxygen not found")
    ENDIF (DOXYGEN_FOUND)
ENDIF (BUILD_DOCUMENTATION)
